//全局变量对象
var global = {};
const messageCollection = new Map();

class Global {


    /**
     * 添加或设置全局变量
     * @param name
     * @param obj
     */
    static setGlobal(name, obj) {
        global[name] = obj;
    }

    /**
     * 获取全局变量
     * @param name
     * @returns {*}
     */
    static getGlobal(name) {
        return global[name];
    }

    /**
     * 注册消息
     * @param msgName
     * @param callback
     */
    static registrationMessage(msgName, callback) {
        if (msgName == null || callback == null) {
            return;
        }
        let callbackSet = messageCollection.get(msgName);
        if (callbackSet == null) {
            callbackSet = new Set();
        }
        callbackSet.add(callback);
        messageCollection.set(msgName, callbackSet);
    }

    /**
     * 触发消息
     * @param msgName
     * @param arg
     */
    static triggerMessage(msgName, arg) {
        if (msgName == null) {
            return;
        }
        let callbackSet = messageCollection.get(msgName);
        if (callbackSet != null) {
            for (let callback of callbackSet) {
                callback(arg);
            }
        }
    }

    /**
     * 移除回调函数
     * @param msgName
     * @param callback
     */
    static removeCallback(msgName, callback) {
        if (msgName == null || callback == null) {
            return;
        }
        let callbackSet = messageCollection.get(msgName);
        if (callbackSet != null) {
            for (let call of callbackSet) {
                if (call === callback) {
                    callbackSet.delete(call);
                }
            }
            messageCollection.set(msgName, callbackSet);
        }
    }
}

export default Global;